【Java】Gradle7.5.1 保姆级内容 Gradle基础 您所在的位置:网站首页 gradle java 【Java】Gradle7.5.1 保姆级内容 Gradle基础

【Java】Gradle7.5.1 保姆级内容 Gradle基础

2023-07-24 01:51| 来源: 网络整理| 查看: 265

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”

第二篇 Gradle基础-02 文章内容速览:通过idea创建一个Gradle管理的项目(单体、多模块项目);build.gradle中依赖类型,项目结构介绍,以及如何构建项目 复制代码 一、创建Gradle管理的项目 1.创建单个项目 idea创建项目

打开idea 点击左上角的 File->new->project,然后选择Gradle->Java->next

1663842902513.png

1663843329624.png

创建好的目录结构如下:

1663843704633.png

发现没有src目录,需要在build.gradle中添加 对应task 生成对应src

1663843941796.png

简单配置build.gradle buildscript {    repositories {        //本地仓库        mavenLocal()        //阿里云仓库        maven {            url "https://maven.aliyun.com/repository/public"       }        //远程中央仓库        mavenCentral()        maven { url "https://repository.primefaces.org" }   }    dependencies {        classpath('org.springframework.boot:spring-boot-gradle-plugin:2.7.0')// 加载插件,用到里面的函数方法   } ​ } ​ apply plugin: 'java' apply plugin: 'idea' // 使用spring boot 框架 apply plugin: 'org.springframework.boot' // 使用spring boot的自动依赖管理 apply plugin: 'io.spring.dependency-management' ​ group 'org.example' version '1.0-SNAPSHOT' ​ repositories {    mavenLocal()    maven {        url "https://maven.aliyun.com/repository/public"   }    mavenCentral()    maven { url "https://repository.primefaces.org" } } ​ dependencies {    implementation('org.springframework.boot:spring-boot-starter-web')    compileOnly "org.projectlombok:lombok:1.18.22" ​ } ​ test {    useJUnitPlatform() } //创建src目录 task createDirs {    sourceSets*.java.srcDirs*.each {        it.mkdirs()   }    sourceSets*.resources.srcDirs*.each{        it.mkdirs()   } } 复制代码 直接启动项目验证 package org.example.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ @RestController @RequestMapping("/student") public class StudentController {    @GetMapping("/say/{msg}")    public String sayMsg(@PathVariable("msg") String msg) {        return "hello " + msg;   } ​ } 复制代码

1664262427777.png

构建项目

方式一:通过命令行

在idea中点击底部Terminal

//清除构建内容 gradle clean //编译代码和配置文件 gradle classes //构建项目并且不包含测试部分 gradle build -x test //构建项目需要测试部分结果 gradle build 复制代码

1664263308863.png

方式二:通过idea按钮

1664263585111.png

构建结果会在项目的build目录下

1663844853906.png

启动jar包 java -jar d:/project_code/learn_code/gradle-single-example/build/libs/gradle-single-example-1.0-SNAPSHOT.jar --server.port=18001 复制代码

1664264486438.png

Build,Execution,Deployment->Gradle->Gradle projects

2.创建多模块项目 idea创建父工程

1664282006387.png

1664282118841.png

删除src

1664282244841.png

创建子工程

子项目:gradle-core-example

1664282348186.png

1664282408108.png

同样方式创建 子项目(gradle-api-example)

查看目录结构

创建之后可以查看目录结构如下,点击settings.gradle即可查看到项目之间的关系 其中include表示子项目名

1664282728474.png

修改父工程build.gradle配置文件 buildscript {    repositories {        mavenLocal()        maven {            url "https://maven.aliyun.com/repository/public"       }        mavenCentral()        maven { url "https://repository.primefaces.org" }   }    dependencies {        classpath('org.springframework.boot:spring-boot-gradle-plugin:2.7.0')// 加载插件,用到里面的函数方法   }    ext{        springBootVersion='2.7.0'   } } ​ ​ plugins {    id 'java'    //apply false 表示不应有父工程    id 'org.springframework.boot' version "${springBootVersion}" apply false    //使用spring boot的自动依赖管理    id 'io.spring.dependency-management' version '1.0.11.RELEASE' } ​ group 'org.example' version '1.0-SNAPSHOT' ​ //对所有项目的配置,包含父项目 allprojects {    group 'org.example'    version '1.0-SNAPSHOT' //指定语言    apply plugin: 'java'    //指定编辑器    apply plugin: 'idea'    apply plugin: 'io.spring.dependency-management' ​    // 编译相关参数    compileJava {        sourceCompatibility = JavaVersion.VERSION_1_8        targetCompatibility = JavaVersion.VERSION_1_8        options.encoding = 'UTF-8'        options.compilerArgs = [                '-Xlint:all', '-Xlint:-processing'       ]   } ​    // 仓库    repositories {        mavenLocal()        // 有私服就在此配置        //阿里云仓库        maven {            url "https://maven.aliyun.com/repository/public"       }        //中央仓库        mavenCentral()        maven { url "https://repository.primefaces.org" } ​        // grandle插件        maven {            url "https://plugins.gradle.org/m2/"       }   } } ​ // 指定依赖jar的版本 类似maven的dependencyManagement,子模块在依赖时可以不用指定版本 allprojects { project ->    buildscript {        dependencyManagement {            imports {                mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"                mavenBom "org.junit:junit-bom:5.7.0"           } ​            dependencies {                dependency 'org.projectlombok:lombok:1.16.16'                dependency 'org.apache.commons:commons-lang3:3.11'                dependency 'commons-collections:commons-collections:3.2.2'                dependency 'com.alibaba.fastjson2:fastjson2:2.0.8'                dependency 'cn.hutool:hutool-all:5.7.16'                dependency 'io.jsonwebtoken:jjwt:0.9.0' ​           }       }   } } 复制代码 配置子模块build.gradle

gradle-core-example模块

// 构建二方库的插件 plugins {    id 'java-library' } ​ // 这里可以指定构建出来的jar的文件名 archivesBaseName = 'gradle-core-example' ​ // 子模块自己的依赖 dependencies {    api('org.springframework.boot:spring-boot-starter')    api('org.springframework.boot:spring-boot-starter-web')    // 使用api,将依赖传递给使用该jar的模块    api 'org.projectlombok:lombok'    // annotationProcessor不会传递,使用了lombok生成代码的模块,需要自己声明annotationProcessor    annotationProcessor 'org.projectlombok:lombok'    api 'com.alibaba.fastjson2:fastjson2' ​ } ​ 复制代码

gradle-api-example模块

plugins {    id 'org.springframework.boot' } ​ // 用了插件org.springframework.boot之后,jar task会失效,可用bootJar取代 bootJar {    archiveBaseName = project.name    archiveVersion = project.version } ​ // 这里可以指定构建出来的jar的文件名 archivesBaseName = 'gradle-api-example' ​ tasks.withType(JavaCompile) {    options.encoding = "UTF-8" } ​ dependencies {    implementation 'org.springframework.boot:spring-boot-starter-web'    // 二方库依赖    implementation project(':gradle-core-example')    // lombok不会传递,使用了lombok生成代码的模块,需要自己声明annotationProcessor    annotationProcessor 'org.projectlombok:lombok' } ​ test {    useJUnitPlatform() } 复制代码 idea中验证项目

1.core模块中写业务功能

1664284970926.png

2.api模块中调用

1664285016966.png

构建项目

命令和单个项目一样,结果如下

1664285131275.png

启动项目

1664284780761.png

二、依赖方式及类型

依赖方式:主要分为直接依赖、项目依赖、本地Jar依赖

直接依赖 //完整写法 implementation group: 'org.projectlombok', name: 'lombok', version: '1.16.16' //简写 implementation 'org.projectlombok:lombok:1.16.16' 复制代码 项目依赖 implementation project(':gradle-core-example') 复制代码 本地Jar依赖 //依赖某个文件 implementation files(**'libs/customer.jar'**, **'libs/biz.jar'**) 复制代码 依赖类型 compileOnly由java插件提供,适用于编译期需要而不需要打包的情况runtimeOnly由 java 插件提供,只在运行期有效,编译时不需要,比如mysql 驱动包。implementation由 java 插件提供,针对源码[src/main 目录] ,在编译、运行时都有效,无传递性。取代老版本中被移除的 compiletestCompileOnly由 java 插件提供,用于编译测试的依赖项,运行时不需要testRuntimeOnly由 java 插件提供,只在测试运行时需要,取代老版本中被移除的testRuntimetestImplementation由 java 插件提供,针对测试代码[src/test 目录] 取代老版本中被移除的testCompileprovidedCompilewar 插件提供支持,编译、测试阶段代码需要依赖此类jar 包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war 包中了;例如servlet-api.jar、jsp-api.jarapijava-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。runtimeruntime 依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysql 驱动包。在 gradle 7.0 已经移除compile编译范围依赖在所有的 classpath 中可用,同时它们也会被打包。在gradle 7.0 已经移除compileOnlyApijava-library 插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。 排除依赖 //不需要的依赖使用 exclude 进行排除 implementation ('com.aliyun:alibaba-dingtalk-service-sdk:2.0.0'){        exclude group:'log4j'   } 复制代码 三、项目结构说明 1.项目目录结构说明

1664287028686.png

2.Wrapper包装器

主要作用是不同项目可以有不用的Gradle版本,也可以说是版本控制配置。实际上本地环境压根就不需要配置Gradle环境,通过Wrapper来进行操作即可

指定/修改项目Gradle版本

查看项目wrapper使用的Gradle版本(开始时未指定 对应的为7.1)

1664287435628.png

//升级wrapper版本号,只是修改gradle.properties中wrapper版本,实际未下载包 gradle wrapper --gradle-version=7.5.1 //构建时 会下载源码包 ./graldew build -x test 复制代码

1664287618809.png

wrapper 执行流程 当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息 将指定版本的 gradle 下载并解压到指定的位置(GRADLE_USER_HOME目录下的wrapper/dists目录中) 并构建本地缓存(GRADLE_USER_HOME目录下的caches目录中),使用相同版本的gradle就不下载了 之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本。 tips: GRALE_USER_HOME 环境变量用于这里的Gradle Wrapper 下载的特定版本的gradle 存储目录。如果我们没有配置过GRALE_USER_HOME 环境变量,默认在当前用户夹目录下的.gradle 文件夹中。idea可以配置 复制代码

1664287948794.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有